#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <math.h>
#include <algorithm>
#include <string>
#include <stack>
using namespace std;
  struct ListNode {
      int val;
    ListNode *next;
     ListNode(int x) : val(x), next(NULL) {}
 };


ListNode* swapPairs(ListNode* head) {
    if(head== nullptr)return head;
    ListNode*a1,*a2,*a3;
    a1=head;
    a2=head->next;
    if(a2== nullptr)return head;
    a3=a2->next;
    a2->next=a1;
    a1->next=swapPairs(a3);
    return a2;
}

int main(){
    ListNode* temp;
    ListNode* a1=new ListNode(1);
    temp=a1;
    temp->next=new ListNode(2);
    temp=temp->next;
    temp->next=new ListNode(3);
    temp=temp->next;
    temp->next=new ListNode(4);

    ListNode*result=swapPairs(a1);
    while(result!= nullptr){
        cout<<result->val<<",";
        result=result->next;
    }
    return 0;
}